// src/pages/components/starRating/starRating.js
// 此组件需要传入score, disabled(是否开启交互模式,默认开启)，styles星星样式（margin、color、font-size）
Component({
  /**
   * 组件的属性列表
   */
    properties: {
        disabled: {
            type: Boolean,
            value: false, // 是否开启交互模式
        },
        score: {
            type: String,
            value: 0, // 属性初始值（可选），如果未指定则会根据类型选择一个
            observer(newVal, oldVal) {
                if (newVal) {
                    const renderData = {
                        stars: this.starCount(newVal),
                    };
                    this.setData(renderData);
                }
            },
        },
        styles: {
            type: String,
            value: '',
        },
        _class: {
            type: String,
            value: '',
        },
    },

  /**
   * 组件的初始数据
   */
    data: {
        stars: '',
    },

  /**
   * 组件的方法列表
   */
    ready() {
        this.setData({ stars: this.starCount(this.data.score) });
    },
    methods: {
    // 计算行星显示规则
        starCount(originStars) {
      // 计算星星显示需要的数据，用数组stars存储五个值，分别对应每个位置的星星是全星、半星还是空星
            let starNum = originStars * 10 / 10,
                stars = [],
                i = 0;
            do {
                if (starNum >= 1) {
                    stars[i] = 'full';
                } else if (starNum >= 0.5) {
                    stars[i] = 'half';
                } else {
                    stars[i] = 'no';
                }
                starNum--;
                i++;
            } while (i < 5);
            return stars;
        },
    // 点击左边,半颗星
        selectLeft(e) {
            let key = e.currentTarget.dataset.key;
            if (this.data.key == 0.5 && e.currentTarget.dataset.key == 0.5) {
        // 只有一颗星的时候,再次点击,变为0颗
                key = 0;
            }
            this.setData({
                stars: this.starCount(key),
            });
            this.triggerEvent('selectCallback', { feedback: key });
        },
    // 点击右边,整颗星
        selectRight(e) {
            const key = e.currentTarget.dataset.key;
            this.setData({
                stars: this.starCount(key),
            });
            this.triggerEvent('selectCallback', { feedback: key });
        },
    },
});
